package cqrtplm.service.impl;

import com.ty.basic.entity.org.UserDO;
import com.ty.basic.service.snow.SnowflakeIdComponent;
import com.ty.basic.session.TyAccountContext;
import cqrtplm.constant.RTErrorCodeEnum;
import cqrtplm.entity.RtCertEuemissionsnoDO;
import cqrtplm.mapper.RtCertEuemissionsnoMapper;
import cqrtplm.service.RtCertEuemissionsnoService;
import cqrtplm.util.RTLogHelper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.sql.Timestamp;
import java.util.Date;
import java.util.List;

@Slf4j
@Service
public class RtCertEuemissionsnoServiceImpl implements RtCertEuemissionsnoService {

    @Resource
    private RtCertEuemissionsnoMapper rtCertEuemissionsnoMapper;

    @Resource
    private SnowflakeIdComponent snowflakeIdComponent;

    @Resource
    private RTLogDifferenceServiceImpl rtLogDifferenceService;

    @Override
    public List<RtCertEuemissionsnoDO> selectRtCertEuemissionsnoList(RtCertEuemissionsnoDO rtCertEuemissionsno) {
        return rtCertEuemissionsnoMapper.selectRtCertEuemissionsnoList(rtCertEuemissionsno);
    }

    @Override
    public RtCertEuemissionsnoDO selectRtCertEuemissionsnoById(String id) {
        return rtCertEuemissionsnoMapper.selectRtCertEuemissionsnoById(id);
    }

    @Override
    public RtCertEuemissionsnoDO selectRtCertEuemissionsnoByNo(String euEmissionsNo) {
        return rtCertEuemissionsnoMapper.selectRtCertEuemissionsnoByNo(euEmissionsNo);
    }

    @Override
    public int insertRtCertEuemissionsno(RtCertEuemissionsnoDO rtCertEuemissionsno) {
        String euEmissionsNo = rtCertEuemissionsno.getEuEmissionsNo();
        RtCertEuemissionsnoDO old = rtCertEuemissionsnoMapper.selectRtCertEuemissionsnoByNo(euEmissionsNo);
        if(old != null) {
            throw RTErrorCodeEnum.DATA_EXISTS.getException("该欧排号已存在");
        }

        UserDO user = TyAccountContext.getUser();
        if (user == null) {
            throw new RuntimeException("用户未登录");
        }

        String snowId = String.valueOf(snowflakeIdComponent.getInstance().nextId());
        rtCertEuemissionsno.setId(snowId);
        rtCertEuemissionsno.setCreateUserId(String.valueOf(user.getOid()));
        rtCertEuemissionsno.setCreateUserName(user.getName());
        rtCertEuemissionsno.setCreateTime(new Timestamp(System.currentTimeMillis()));

        log.info("欧排号-新增{},{},{},{}",
                 euEmissionsNo,
                 snowId,
                 new Date(),
                 user.getName());
        rtLogDifferenceService.newLog(
                rtCertEuemissionsno, null,
                rtCertEuemissionsno.getId(),
                rtCertEuemissionsno.getCreateUserName(),
                "欧排号",
                "新增",
                ""
        );
        return rtCertEuemissionsnoMapper.insertRtCertEuemissionsno(rtCertEuemissionsno);
    }

    @Override
    public int updateRtCertEuemissionsno(RtCertEuemissionsnoDO rtCertEuemissionsno) {
        RtCertEuemissionsnoDO old = rtCertEuemissionsnoMapper.selectRtCertEuemissionsnoById(rtCertEuemissionsno.getId());
        if(old == null) {
            throw RTErrorCodeEnum.DATA_NOT_EXISTS.getException("该欧排号记录不存在");
        }

        UserDO user = TyAccountContext.getUser();
        if (user != null) {
            rtCertEuemissionsno.setUpdateUserId(String.valueOf(user.getOid()));
            rtCertEuemissionsno.setUpdateUserName(user.getName());
        }
        rtCertEuemissionsno.setUpdateTime(new Timestamp(System.currentTimeMillis()));

        int r = rtCertEuemissionsnoMapper.updateRtCertEuemissionsno(rtCertEuemissionsno);
        if(r > 0) {
            rtLogDifferenceService.newLog(
                    rtCertEuemissionsno, old,
                    rtCertEuemissionsno.getId(),
                    rtCertEuemissionsno.getCreateUserName(),
                    "欧排号",
                    "修改",
                    ""
            );
        }
        return r;
    }

    @Override
    public int deleteRtCertEuemissionsnoById(String id) {
        return rtCertEuemissionsnoMapper.deleteRtCertEuemissionsnoById(id);
    }

    @Override
    public int deleteRtCertEuemissionsnoByIds(List<String> ids) {
        return rtCertEuemissionsnoMapper.deleteRtCertEuemissionsnoByIds(ids);
    }
}